﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;

namespace TP2.Lib
{
    // [XmlInclude(typeof(Proyectil))]
     [Serializable]
    public abstract class Proyectil : ElementoJuego
    {

        #region /*-----------Propiedades--------------*/
        private int _danio;
        public int Danio
        {
            get {return this._danio;}
            set {this._danio = value;}
        }

        private bool _vengoDeEnemigo;
        public bool VengoDeEnemigo
        {
            get { return this._vengoDeEnemigo; }
            set { this._vengoDeEnemigo = value; }
        }
        #endregion


        public Proyectil() { } /*Contructor vacio, lo utiliza la serialización*/
        
        public Proyectil(double[] posInicial, int[] dimensiones) : base(posInicial, dimensiones) { }

        
        /*Metodos abstractos heredados: obligados a definirlos*/

        public override void Impactar(ElementoJuego impactante)
        {
            impactante.ImpactarConProyectil(this);
        }

        public override void ImpactarConAvionCivil()
        {
            this.ModificarVida(this.Vida);
        }

        public override void ImpactarConAvionEnemigo()
        {
            this.ModificarVida(this.Vida);
        }

        public override void ImpactarConAvionJugador()
        {
            this.ModificarVida(this.Vida);
        }
        
        public override void ImpactarConHelicopteroPolicia()
        {
            this.ModificarVida(this.Vida);
        }

        public override void ImpactarConTanqueEnergia(TanqueEnergia impactante)
        {
            //Supongo que estos elementos no se impactan.
        }

        public override void ImpactarConArma(Arma impactante)
        {
            //Supongo que estos elementos no se impactan.
        }

        public override bool ImpactarConProyectil(Proyectil impactante)
        {
            //Supongo que estos elementos no se impactan.
            return (false);
        }

        public void ImpactoConBorde()
        {
            this.ModificarVida(this.Vida);
        }
        
        #region /*----metodos privados ------*/

        private void Mover()
        {
            double[] siguientePosicion = new double[3];
            siguientePosicion = this.Recorrido.GetSiguientePunto(this.Posicion);
            this.Posicion = siguientePosicion;
        }
        #endregion
    }
}
